package controller

import (
	"blog/service"
	"blog/utils"
	"crypto/md5"
	"fmt"
	"io"
	"net/http"
	"time"
)

func init() {
	http.HandleFunc("/blog/login/login", login)
}

/*
用户登录
*/
func login(writer http.ResponseWriter, request *http.Request) {
	writer.Header().Set("Access-Control-Allow-Origin", "*")
	writer.Header().Set("content-type", "text/json")

	query := request.URL.Query()
	username := query.Get("username")
	password := query.Get("password")
	password = fmt.Sprintf("%x", md5.Sum([]byte(password)))

	flag := service.Login(username, password)

	var msg string
	if flag {
		token := utils.CreateToken(username)
		cName := http.Cookie{
			Name:       username,    //	cookie的名称
			Value:      token,       //	cookie名称对应的值
			Path:       "/",         //
			Domain:     "",          //	cookie的作用域
			Expires:    time.Time{}, //	cookie的过期时间
			RawExpires: "",
			MaxAge:     0,     //	设置过期时间，对应浏览器cookie的MaxAge属性
			Secure:     false, //	设置Secure属性(说明：Cookie的Secure属性，意味着保持Cookie通信只限于加密传输，指示浏览器仅仅在通过安全/加密连接才能使用该Cookie。如果一个Web服务器从一个非安全连接里设置了一个带有secure属性的Cookie，当Cookie被发送到客户端时，它仍然能通过中间人攻击来拦截)
			HttpOnly:   true,  //	设置httpOnly属性（说明：Cookie的HttpOnly属性，指示浏览器不要在除HTTP（和 HTTPS)请求之外暴露Cookie。一个有HttpOnly属性的Cookie，不能通过非HTTP方式来访问，例如通过调用JavaScript(例如，引用 document.cookie），因此，不可能通过跨域脚本（一种非常普通的攻击技术）来偷走这种Cookie。尤其是Facebook 和 Google 正在广泛地使用HttpOnly属性。）
			SameSite:   0,
			Raw:        "",
			Unparsed:   nil,
		}

		// 设置cookie
		writer.Header().Set("Set-Cookie", cName.String())

		msg = utils.Rok()
		redisTem := utils.Pool.Get()
		_, _ = redisTem.Do("Set", username, token)
		_, _ = redisTem.Do("expire", username, 60*30)
		_ = redisTem.Close()
	} else {
		msg = utils.Rerr()
	}

	_, _ = io.WriteString(writer, msg)

}
